package java_thinking.unit_7._7_8;

/**
 * @Description :http://www.cnblogs.com/javaee6/p/3714716.html?utm_source=tuicool&utm_medium=referral
 * 调用类常量不会初始化类!!!
 *     被final修辞的静态变量
 * 原因:常量一种特殊的变量，因为编译器把他们当作值(value)而不是域(field)来对待。
 * 如果你的代码中用到了常变量(constant variable)，编译器并不会生成字节码来从对象中载入域的值，
 * 而是直接把这个值插入到字节码中。这是一种很有用的优化，
 * 但是如果你需要改变final域的值那么每一块用到那个域的代码都需要重新编译
 * @author: cww
 * @DateTime: 2019-02-26 21:57
 */


class ConstClass {
    private static int i = print(1);
    static {
        System.out.println("ConstClass init");
    }
    public static final int HELLOWORLD = 2;
    static int print(int i){
        System.out.println(i);
        return i;
    }
}

class Test1 {
    public static void main(String[] args) {
        // 调用类常量不会初始化类!!!,但是如果是引用对象或方法就会初始化类
        System.out.println(ConstClass.HELLOWORLD);
    }
}
